
//显式转换和隐式转换

/*
1、APIS往往要求访问原始资源(rawresources)，所以每一个RAII class应该提供一个“取得其所管理之资源”的办法。
2、对原始资源的访问可能经由显式转换或隐式转换。一般而言显式转换比较安全，但隐式转换对客户比较方便。
*/
#include<iostream>
#include<memory>
class FontHandle{};


void getFontHandle(FontHandle fh){std::cout<<"*******************"<<std::endl;};


class Font
{
    public:
        Font(){std::cout<<"default constructor"<<std::endl;};
        ~Font(){std::cout<<"default destructor"<<std::endl;};
        FontHandle getFH(){return fh_;};//显式转换
        operator FontHandle (){return fh_;};//隐式转换
    private:
        FontHandle fh_;
};

int main(int argc, char const *argv[])
{
    std::shared_ptr<Font> pf = std::make_shared<Font>();
    Font f;
    getFontHandle(pf->getFH());//显式转换
    getFontHandle(f);//隐式转换
    return 0;
}
